ZscoreNormalizationFloat Subroutine

public subroutine ZscoreNormalizationFloat(gridIn, gridOut)

also called zero-mean normalization. The values of attribute X are normalized using the mean and standard deviation of X. A new value new_v is obtained using the following expression:

new_v = (v - mX) / sX

where mX and sX are the mean and standard deviation of attribute X, respectively. After zero-mean normalizing each feature will have a mean value of 0. Also, the unit of each value will be the number of (estimated) standard deviations away from the (estimated) mean.

Arguments

Type IntentOptional Attributes Name
type(grid_real), intent(in) :: gridIn
type(grid_real), intent(inout) :: gridOut

Variables

Type Visibility Attributes Name Initial
integer(kind=short), public :: i
integer(kind=short), public :: j
real(kind=float), public :: mean
real(kind=float), public :: std

Source Code

SUBROUTINE ZscoreNormalizationFloat &
!
(gridIn, gridOut) 

IMPLICIT NONE

!Arguments with intent(in):
TYPE (grid_real), INTENT(IN) :: gridIn

!Arguments with intent(inout):
TYPE (grid_real), INTENT(INOUT) :: gridOut

!Local declaration
INTEGER (KIND = short) :: i, j
REAL (KIND = float) :: mean, std

!---------------------end of declarations--------------------------------------

!get mean
mean = GetMean (gridIn)

!get standard deviation
std = getStDev (gridIn)

!normalize grid. gridout is supposed to be initialized outside the subroutine
DO i = 1, gridIn % idim
  DO j = 1, gridIn % jdim
    IF (gridIn % mat (i,j) /= gridIn % nodata) THEN
      gridOut % mat (i,j) = (gridIn % mat (i,j) - mean) / std 
    END IF
  END DO

END DO

RETURN

END SUBROUTINE ZscoreNormalizationFloat